# coding: utf-8
import os
import sys

sys.path.append(os.pardir)  # 为了导入父目录中的文件而进行的设定
import numpy as np
from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient


# 人工网络
class simpleNet:
    def __init__(self):  # 初始化权重矩阵
        self.W = np.random.randn(2, 3)

    def predict(self, x):  # 神经网络推理
        return np.dot(x, self.W)

    def loss(self, x, t):  # 损失函数计算
        z = self.predict(x)  # 预测结果
        y = softmax(z)  # 激活函数softmax
        loss = cross_entropy_error(y, t)  # 使用交叉熵误差损失函数将损失函数值和标签进行计算，返回损失函数值

        return loss


# 假数据
x = np.array([0.6, 0.9])
t = np.array([0, 0, 1])

net = simpleNet()

# 使用lambda的方式定义新函数
f = lambda w: net.loss(x, t)  # 表示损失函数矩阵
dW = numerical_gradient(f, net.W)  # 计算损失函数对于权重矩阵的数值微分

print(dW)
